//
//  YTSecureTextField.h
//  YiTuDriverClient
//
//  Created by 石少庸 on 2017/5/22.
//  Copyright © 2017年 Yitu. All rights reserved.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN


#ifdef NSFoundationVersionNumber_iOS_9_x_Max
UIKIT_EXTERN NSNotificationName const YTUnitFieldDidBecomeFirstResponderNotification;
UIKIT_EXTERN NSNotificationName const YTUnitFieldDidResignFirstResponderNotification;
#else
UIKIT_EXTERN NSString *const YTUnitFieldDidBecomeFirstResponderNotification;
UIKIT_EXTERN NSString *const YTUnitFieldDidResignFirstResponderNotification;
#endif


/**
 键盘样式
 
 - YTKeyboardTypeNumberPad: 纯数字键盘
 - YTKeyboardTypeASCIICapable: ASCII 字符键盘
 */
typedef NS_ENUM(NSUInteger, YTKeyboardType) {
    YTKeyboardTypeNumberPad,
    YTKeyboardTypeASCIICapable
};

@protocol YTUnitFieldDelegate;

IB_DESIGNABLE
@interface YTSecureTextField : UIControl

@property (nullable, nonatomic, weak) id<YTUnitFieldDelegate> delegate;

/**
 保留的用户输入的字符串
 */
@property (nullable, nonatomic, copy, readonly) NSString *text;

/**
 当需要密文输入时，可以设置该值为 YES，输入文字将被圆点替代
 默认值为 NO.
 */
@property (nonatomic, assign, getter=isSecureTextEntry) IBInspectable BOOL secureTextEntry;

#if TARGET_INTERFACE_BUILDER
/**
 允许输入的个数。
 目前 YTUnitField 允许的输入单元个数区间控制在 1 ~ 8 个。任何超过该范围内的赋值行为都将被忽略。
 */
@property (nonatomic, assign) IBInspectable NSUInteger inputUnitCount;
#else
@property (nonatomic, assign, readonly) NSUInteger inputUnitCount;
#endif

#if TARGET_INTERFACE_BUILDER
@property (nonatomic, assign) IBInspectable NSInteger defaultKeyboardType;
@property (nonatomic, assign) IBInspectable NSInteger defaultReturnKeyType;
#else
@property (nonatomic, assign) YTKeyboardType defaultKeyboardType;       // 默认为 YTKeyboardTypeNumberPad。
@property (nonatomic, assign) UIReturnKeyType defaultReturnKeyType;     // 默认为 UIReturnKeyDone。
#endif


/**
 每个 Unit 之间的距离，默认为 0
 */
@property (nonatomic, assign) IBInspectable CGFloat unitSpace;

/**
 设置边框圆角
 */
@property (nonatomic, assign) IBInspectable CGFloat borderRadius;

/**
 设置边框宽度，默认为 1。
 */
@property (nonatomic, assign) IBInspectable CGFloat borderWidth;

/**
 设置文本字体
 */
@property (nonatomic, strong) IBInspectable UIFont *textFont;

/**
 设置文本颜色，默认为黑色。
 */
@property (null_resettable, nonatomic, strong) IBInspectable UIColor *textColor;

@property (null_resettable, nonatomic, strong) IBInspectable UIColor *tintColor;

/**
 如果需要完成一个 unit 输入后显示地指定已完成的 unit 颜色，可以设置该属性。默认为 nil。
 注意：
 该属性仅在`unitSpace`属性值大于 2 时有效。在连续模式下，不适合颜色跟踪。可以考虑使用`cursorColor`替代
 */
@property (nullable, nonatomic, strong) IBInspectable UIColor *trackTintColor;

/**
 用于提示输入的焦点所在位置，设置该值后会产生一个光标闪烁动画，如果设置为空，则不生成光标动画。
 */
@property (nullable, nonatomic, strong) IBInspectable UIColor *cursorColor;

/**
 当输入完成后，是否需要自动取消第一响应者。默认为 NO。
 */
@property (nonatomic, assign) IBInspectable BOOL autoResignFirstResponderWhenInputFinished;

- (instancetype)initWithInputUnitCount:(NSUInteger)count;
- (void)cleanText;

@end



@protocol YTUnitFieldDelegate <NSObject>

@optional
- (BOOL)unitField:(YTSecureTextField *)uniField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;

@end

NS_ASSUME_NONNULL_END

